package com.sailors.common.task.provider.infra.design.state;

import org.apache.commons.lang3.StringUtils;

import java.util.Optional;

/**
 * State
 *
 * @description: 状态类
 * @author: cyj
 * @date 2022 -09-01 17:52:47
 */
public interface IState<T> {

    /**
     * Do action r 执行
     *
     * @param param param
     * @return the r
     */
    void doAction(T param);

    /**
     * Do action r 执行
     *
     * @param param param
     * @return the r
     */
    Object doActionReturn(T param);

    /**
     * Gets state type 获取状态类型
     *
     * @return the state type
     */
    StateType getStateType();

    /**
     * State type
     *
     * @description: 状态类型，例如： 回访-签到  回访-审核等 type是回访，类型是签到
     * @author: cyj
     * @date 2022 -09-01 17:53:07
     */
    interface StateType {

        /**
         * Type string 类型
         *
         * @return the string
         */
        String type();

        /**
         * Action name string 状态名
         *
         * @return the string
         */
        String actionName();

        /**
         * 识别标识
         * @return
         */
        default String getTag() {
            return String.format("%s-%s", Optional.ofNullable(type()).orElse(StringUtils.EMPTY), Optional.ofNullable(actionName()).orElse(StringUtils.EMPTY));
        }

    }

}
